//package com.xdu.filter;
//
//import com.alibaba.fastjson.JSON;
//import com.xdu.common.BaseContext;
//import com.xdu.common.R;
//import org.springframework.util.AntPathMatcher;
//
//import javax.servlet.*;
//import javax.servlet.annotation.WebFilter;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//
///**
// * 1、创建自定义过滤器LoginCheckFilter
// * 2、在启动类上加入注解@ServletComponentScan
// * 3、完善过滤器的处理逻辑
// * 在用户访问某些资源时，用来检查用户是否已经完成登陆
// */
//@WebFilter(filterName = "logCheckFilter", urlPatterns = "/*")
//public class LogCheckFilter implements Filter {
//    //专门用来路径比较的对象
//    public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
//
//    @Override
//    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//        HttpServletRequest request = (HttpServletRequest) servletRequest;
//        HttpServletResponse response = (HttpServletResponse) servletResponse;
//        //1、获取本次请求的URI
//        String requestURI = request.getRequestURI(); //例子:/backend/index.html就是uri
//        //2、判断本次请求是否需要处理
//        //定义不需要处理的请求路径:
//        String[] urls = new String[]{
//                "/employee/login",
//                "/employee/logout",
//                "/backend/**",
//                "/front/**",
//                "/user/sendMsg",//移动端发送短信
//                "/user/login",//移动端登陆
//                "/string/**",
//                "/students/*"
//        };
//        //check为 true 则需要放行
//        boolean check = check(urls, requestURI);
//        //3、如果不需要处理，则直接放行
//        if (check) {
//            filterChain.doFilter(request, response);
//            return;
//        }
//        //4-1、判断登录状态，如果已登录，则直接放行(后台)
//        Long id = (Long) request.getSession().getAttribute("employee");
//        if (id != null) {
//            //向ThreadLocal中添加session中的id信息,原因见Day3公共字段填充功能的语雀笔记
//            BaseContext.setCurrentId(id);
//            filterChain.doFilter(request, response);
//            return;
//        }
//        //4-2、判断登录状态，如果已登录，则直接放行(前台)
//        Long id2 = (Long) request.getSession().getAttribute("user");
//        if (id2 != null) {
//            //向ThreadLocal中添加session中的id信息,原因见Day3公共字段填充功能的语雀笔记
//            BaseContext.setCurrentId(id2);
//            filterChain.doFilter(request, response);
//            return;
//        }
//        //5、如果未登录则返回未登录结果 通过输出流的方式向客户端写回数据
//        response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
//        return;
//    }
//
//    /**
//     * 路径检查，检查此次请求是否需要放行
//     *
//     * @param urls
//     * @param requestURI
//     * @return 返回 true 则需要放行
//     */
//    public boolean check(String[] urls, String requestURI) {
//        for (String url : urls) {
//            boolean match = PATH_MATCHER.match(url, requestURI);
//            if (match) {
//                return true;
//            }
//        }
//        return false;
//    }
//
//}
